#!/usr/bin/env bash
#  SPDX-License-Identifier: BSD-3-Clause
#  Copyright (C) 2018 Intel Corporation
#  All rights reserved.
#
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../..")

source "$rootdir/test/common/autotest_common.sh"

function cleanup() {
	rm -f "$testdir/bdevperf.json"
	rm -f "$testdir/aio.bdev"
}

bdevperf="$_examples_dir/bdevperf"

truncate -s 64M "$testdir/aio.bdev"

"$rootdir/test/app/bdev_svc/bdev_svc" --wait-for-rpc &
bdev_svc_pid=$!

trap 'cleanup; killprocess "$bdev_svc_pid"; exit 1' SIGINT SIGTERM EXIT

waitforlisten "$bdev_svc_pid"
# Minimal number of bdev io pool (128) and cache (1)
$rpc_py iobuf_set_options --small-pool-count 8192 --large-pool-count 1024
$rpc_py bdev_set_options --bdev-io-pool-size 128 --bdev-io-cache-size 1
$rpc_py framework_start_init
$rpc_py bdev_aio_create "$testdir/aio.bdev" aio0 4096
$rpc_py bdev_lvol_create_lvstore aio0 lvs0
$rpc_py bdev_lvol_create -l lvs0 lvol0 32
$rpc_py save_config > "$testdir/bdevperf.json"

killprocess "$bdev_svc_pid"

$bdevperf --json "$testdir/bdevperf.json" -q 128 -o 4096 -w write -t 5 -r /var/tmp/spdk.sock &
bdev_perf_pid=$!
waitforlisten "$bdev_perf_pid"
$rpc_py bdev_enable_histogram aio0 -e
sleep 2
$rpc_py bdev_get_histogram aio0 | "$rootdir/scripts/histogram.py"
$rpc_py bdev_enable_histogram aio0 -d
wait "$bdev_perf_pid"

$bdevperf --json "$testdir/bdevperf.json" -q 128 -o 4096 -w read -t 5 -r /var/tmp/spdk.sock &
bdev_perf_pid=$!
waitforlisten "$bdev_perf_pid"
$rpc_py bdev_enable_histogram aio0 -e
sleep 2
$rpc_py bdev_get_histogram aio0 | "$rootdir/scripts/histogram.py"
$rpc_py bdev_enable_histogram aio0 -d
wait "$bdev_perf_pid"

$bdevperf --json "$testdir/bdevperf.json" -q 128 -o 4096 -w unmap -t 1
sync

trap - SIGINT SIGTERM EXIT
cleanup
